From: Michael Natterer Date: Mon, 11 Jun 2018 16:36:50 +0000 (+0200) Subject: gtk: fix wheel scrolling for very small adjustment page_size X-Git-Tag: archive/raspbian/3.24.39-1+rpi1~1^2~65^2~35^2~19 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=c0ba041c73214f82d2c32b2ca1fa8f3c388c6170;p=gtk%2B3.0.git gtk: fix wheel scrolling for very small adjustment page_size For very small page sizes of < 1.0, the effect of pow() is the opposite of what's intended and the scroll steps become unusably large, make sure we never get a scroll_unit larger than page_size / 2.0, which used to be the default before the pow() magic was introduced. --- diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c index dc495631cb..c106102929 100644 --- a/gtk/gtkrange.c +++ b/gtk/gtkrange.c @@ -3061,7 +3061,17 @@ _gtk_range_get_wheel_delta (GtkRange *range, page_increment = gtk_adjustment_get_page_increment (adjustment); if (GTK_IS_SCROLLBAR (range)) - scroll_unit = pow (page_size, 2.0 / 3.0); + { + gdouble pow_unit = pow (page_size, 2.0 / 3.0); + + /* for very small page sizes of < 1.0, the effect of pow() is + * the opposite of what's intended and the scroll steps become + * unusably large, make sure we never get a scroll_unit larger + * than page_size / 2.0, which used to be the default before the + * pow() magic was introduced. + */ + scroll_unit = MIN (pow_unit, page_size / 2.0); + } else scroll_unit = page_increment; diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 8112cfd8e3..b390f9d42e 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -1296,6 +1296,7 @@ get_scroll_unit (GtkScrolledWindow *sw, GtkRange *scrollbar; GtkAdjustment *adj; gdouble page_size; + gdouble pow_unit; if (orientation == GTK_ORIENTATION_HORIZONTAL) scrollbar = GTK_RANGE (priv->hscrollbar); @@ -1307,7 +1308,10 @@ get_scroll_unit (GtkScrolledWindow *sw, adj = gtk_range_get_adjustment (scrollbar); page_size = gtk_adjustment_get_page_size (adj); - scroll_unit = pow (page_size, 2.0 / 3.0); + + /* see comment in _gtk_range_get_wheel_delta() */ + pow_unit = pow (page_size, 2.0 / 3.0); + scroll_unit = MIN (pow_unit, page_size / 2.0); #else scroll_unit = 1; #endif